/*
 * Nombre de Clase:	envioSmtp
 * Nombre de Clases Asociadas:
 * Informacion de version: 1.0
 * Fecha Creacion: 01/08/2007  
 * Autor Original: 
 * Descripcion: 
 * Fecha Ultima Modificacion - Responsable Ultima Modificacion - Descripcion Ultima Modificacion
 * Copyright  
 */

/*
 * Metodo: envioSmtp
 * Descripcion: 
 * Fecha Creacion: 01/03/2008  
 * Autor Original: 
 * Fecha - Responsable - Descripcion del Cambio    
*/

package com.aasa.siccosap.util;
import javax.mail.*;
import javax.activation.*;
import javax.mail.internet.*;
import java.util.*;
import java.util.List;

import javax.swing.*; 
import java.awt.*;
import java.io.File;
import org.apache.log4j.Logger;

/**
*
* @author rnavarre
*/

public class envioSmtp {//todo el envio smtp se realiza aqui
    String strPv_host="";
    String strPv_puerto="";
    String strPv_usuario="";
    String strPv_contrasena="";
    String strPv_de="";
    String strPv_para="";
    String strPv_asunto="";
    String strPv_mensaje="";
    String strPv_cco="";
    MimeMessage objPv_mimeMsg=null;
    Multipart objPv_multipart=null;
    static Logger logger = Logger.getLogger("envioSmtp.class");
 
    public envioSmtp(String u,String c){
        this.strPv_usuario= u;
        this.strPv_contrasena=c;          
    }
    
    public void conexionSmtp(String host,String puerto,boolean autenticacion){
        try{
            //if (host == null)
            //System.out.println("host no encontrado");
            //if (puerto == null)
            //System.out.println("usuario no encontrado");           

            Properties properties = new Properties();
            properties.put("mail.smtp.host", host);            
            properties.put("mail.smtp.port", puerto);
            Session session;
            if(autenticacion){
                properties.put("mail.smtp.auth", "true");
                properties.put("mail.smtp.starttls.enable", "true");
                session = Session.getDefaultInstance(properties,
                new Authenticator() {
                public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(strPv_usuario, strPv_contrasena);
                }
                });
            }else{
                session  = Session.getDefaultInstance(properties,null);
            }
            objPv_mimeMsg = new MimeMessage(session);
            objPv_multipart = new MimeMultipart(); 
            if (strPv_usuario != null) {
                    try {
                    	objPv_mimeMsg.setFrom(new InternetAddress(strPv_usuario));//aqui se pone de/from
                    } catch (AddressException ex) {
                        ex.printStackTrace();
                    } catch (MessagingException ex) {
                        ex.printStackTrace();
                    }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
     public void ponerAsunto(String asunto){
        this.strPv_asunto=asunto;
        if (asunto != null) {
            try {
                //mimeMsg.setSubject(asunto, "GBK");
            	objPv_mimeMsg.setSubject(asunto, "US-ASCII"/*"UTF-8"*/);
            } catch (MessagingException ex) {
                ex.printStackTrace();
            }
        }
    }

    public void ponerPara(String para){
        this.strPv_para=para;
        if (para != null) {
            try {
            	objPv_mimeMsg.setRecipients(Message.RecipientType.TO, para);
            } catch (AddressException ex) {
                ex.printStackTrace();
            } catch (MessagingException ex) {
                ex.printStackTrace();
            }
        }
    }
    
    public void ponerCCO(String cco){
        this.strPv_cco=cco;
        if (this.strPv_cco != null) {
            try {
            	objPv_mimeMsg.setRecipients(Message.RecipientType.BCC, cco);
            } catch (AddressException ex) {
                ex.printStackTrace();
            } catch (MessagingException ex) {
                ex.printStackTrace();
            }
        }
    }
    
    public void ponerTexto(String mensaje){
        BodyPart messageBodyPart = new MimeBodyPart();
        try {
            // Fill the message
            messageBodyPart.setText(mensaje);
            objPv_multipart.addBodyPart(messageBodyPart);
        } catch (MessagingException ex) {
            ex.printStackTrace();                  
        }
    }
    
    public void ponerTexto2(String mensaje){
        //BodyPart messageBodyPart = new MimeBodyPart();
        MimeBodyPart messageBodyPart = new MimeBodyPart();
        try {
            // Fill the message
            //messageBodyPart.setText(mensaje);
            //esaravia
           	messageBodyPart.setContent(mensaje, "text/html");  
            objPv_multipart.addBodyPart(messageBodyPart);
        } catch (MessagingException ex) {
            ex.printStackTrace();                  
        }
    }
    
    public void ponerAdjunto(String rutaCompletaAdjunto,String nombreArchivo){
        BodyPart messageBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(rutaCompletaAdjunto);
        try {
            messageBodyPart.setDataHandler(new DataHandler(source));     
            messageBodyPart.setFileName(nombreArchivo);       
            objPv_multipart.addBodyPart(messageBodyPart);
            } catch (MessagingException ex) {
            ex.printStackTrace();
        }      
    }    
    public void ponerAdjunto(File objA_adjunto,String filename){
        BodyPart messageBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(objA_adjunto);
        try {
            messageBodyPart.setDataHandler(new DataHandler(source));     
            messageBodyPart.setFileName(filename);       
            objPv_multipart.addBodyPart(messageBodyPart);
            } catch (MessagingException ex) {
            ex.printStackTrace();
        }      
    } 
    public void envioMensaje(){
    	
           try {
            	objPv_mimeMsg.setContent(objPv_multipart);
            	objPv_mimeMsg.setSentDate(new Date());
            	//objPv_mimeMsg.setRecipients(Message.RecipientType.TO, "rnavarre@m1.aasa.com.pe");
            	//objPv_mimeMsg.setRecipients(Message.RecipientType.BCC, "rnavarre@m1.aasa.com.pe");
            	//System.out.println("to: "+objPv_mimeMsg.getRecipients(Message.RecipientType.TO).toString());
                /*Transport.send(objPv_mimeMsg);*/ 
            } catch (MessagingException ex) {
                ex.printStackTrace();
            }
            
           
    }

    public void envioMensaje2(){
    	try {
    		objPv_mimeMsg.setContent(objPv_multipart);
         	objPv_mimeMsg.setSentDate(new Date());
            Transport.send(objPv_mimeMsg);
    	} catch (MessagingException ex) {
    		ex.printStackTrace();
    	}
    }
    
    public String obtenerAsunto(){
        return this.strPv_asunto;
    } 
    public String obtenerDe(){
        return this.strPv_de;
    }    
    public String obtenerPara(){ 
        return this.strPv_para;
    }
    public static void main2(){//String argv[]){
    	//ejemplo para envio a internet y con autenticacion funciona!!!
    	/*envioSmtp env=new envioSmtp("rnavarre@aasa.com.pe","CCdd83");//"ronaldnav@gmail.com","26febrero1983");
        env.conexionSmtp("m1.aasa.com.pe","25",true);
        env.ponerAsunto("n-esimo Mail de prueba con adjunto");
        env.ponerPara("tflores@aasa.com.pe");
        env.ponerTexto("este es el texto del cuerpo");
        env.ponerAdjunto("src/archivos/Aceptar.gif","escudo.gif");
        env.envioMensaje();*/
    	
        //System.out.println("INI");
        envioSmtp env=new envioSmtp("franklin.bustos@pe.sonda.com","Fsonda123");//"ronaldnav@gmail.com","26febrero1983");
        env.conexionSmtp("sndsc42.sondaperu.com.pe","25",true);
        env.ponerAsunto("n-esimo Mail de prueba con adjunto");
        env.ponerPara("franklin.bustos@pe.sonda.com");
        env.ponerCCO("alex.salome@pe.sonda.com");
        env.ponerTexto("este es el texto del cuerpo");
        env.ponerAdjunto("WebRoot/documento/Documento_Prueba.doc","Documento_Prueba_Adjunto.doc");
        env.envioMensaje2();
        //System.out.println("FIN");
    }
    
    public static void main(String argv[]){
		try {
			List<String> listaUsuarios1 = new ArrayList<String>();
			listaUsuarios1.add("alarosa");
			listaUsuarios1.add("mballon");
			listaUsuarios1.add("fsoto");
			listaUsuarios1.add("mmatos");
			listaUsuarios1.add("mromero");
			
			List<String> listaUsuarios2 = new ArrayList<String>();
			listaUsuarios2.add("lpacheco");
			listaUsuarios2.add("bviveros");
			
			envioSmtp env=new envioSmtp("franklin.bustos@pe.sonda.com","Fsonda123");//"ronaldnav@gmail.com","26febrero1983");
	        env.conexionSmtp("sndsc42.sondaperu.com.pe","25",true);
	        String strL_asunto = "RECLAMOS ATENDIDOS";
	        String strL_texto = "Se adjunta el reporte de tareas realizadas.";
	        env.ponerAsunto(strL_asunto);
	        env.ponerPara("franklin.bustos@pe.sonda.com");
	        env.ponerCCO("alex.salome@pe.sonda.com");
	        env.ponerTexto(strL_texto);
	        //env.ponerAdjunto(archivoReporte, archivoReporte.getName());
	        env.envioMensaje2();
	        
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
